package com.lxl.config;

import org.springframework.core.env.Environment;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

/**
 * @Description swagger配置
 * @Date 2021/11/26 16:18
 * @Created by LXLDEMO
 */

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket docket(){return new Docket(DocumentationType.SWAGGER_2).groupName("A");}
    // 设置分组
    @Bean
    public Docket docket0(Environment environment){
        // 设置要显示的swagger环境
        Profiles profiles = Profiles.of("test");
        // 获取项目环境，判断是否处于设定环境，若有上述环境则返回true
        boolean isProfile = environment.acceptsProfiles(profiles);
        System.out.println("是否处于设定环境中：" + isProfile);
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(generateApiInfo("department_part","swagger-ui for department"))
                .groupName("Department")//分组
                .enable(isProfile) // 是否启用swagger-ui
                .select() //选择哪些路径和api会生成document
                //RequestHandlerSelectors：配置要扫描接口的方式
                //basePackage：指定要扫描的包
                //  any：扫描全部
                //  none：都不扫描
                //  withClassAnnotation：扫描类上的注解，参数是一个注解的反射对象
                //  withMethodAnnotation：扫描方法上的注解

//                .apis(RequestHandlerSelectors.basePackage("com.lxl.controller"))

                // /department4swagger/**  扫描所有接口
                // /department4swagger/*   不能扫描出 mapping为""的接口
                .paths((PathSelectors.ant("/department4swagger/**")))
                .build();
    }
    @Bean
    public Docket docket1(Environment environment){
        // 设置要显示的swagger环境
        Profiles profiles = Profiles.of("test");
        // 获取项目环境，判断是否处于设定环境，若有上述环境则返回true
        boolean isProfile = environment.acceptsProfiles(profiles);
        System.out.println("是否处于设定环境中：" + isProfile);
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(generateApiInfo("department_part","swagger-ui for department"))
                .groupName("Department2")//分组
                .enable(isProfile) // 是否启用swagger-ui
                .select() //选择哪些路径和api会生成document
                //RequestHandlerSelectors：配置要扫描接口的方式
                //basePackage：指定要扫描的包
                //  any：扫描全部
                //  none：都不扫描
                //  withClassAnnotation：扫描类上的注解，参数是一个注解的反射对象
                //  withMethodAnnotation：扫描方法上的注解

//                .apis(RequestHandlerSelectors.basePackage("com.lxl.controller"))

                // /department4swagger/**  扫描所有接口
                // /department4swagger/*   不能扫描出 mapping为""的接口
                .paths((PathSelectors.ant("/department4swagger2/**")))
                .build();
    }

    /**
     * 配置swagger信息
     * @param title
     * @param description
     * @return
     */
    private ApiInfo generateApiInfo(String title,String description){
        // 作者信息
        Contact contact = new Contact("lxl","","email@qq.com");
        return new ApiInfo(
                title, //标题
                description, // 描述
                "1.0",
                "urn:tos",
                contact,
                "Apache 2.0",//许可
                "http://www.apache.org/licenses/LICENSE-2.0",//许可地址
                new ArrayList<>()
        );
    }
}
